/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.Dentista;
import br.com.sigodonto.model.entity.Paciente;
import br.com.sigodonto.model.util.RelatorioUtil;
import br.com.sigodonto.model.util.SessionUtil;
import br.com.sigodonto.view.datamodel.PacienteDataModel;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class EmitirAtestadoMB implements Serializable {

    /**
     * Creates a new instance of EmitirAtestadoMB
     */
    private Paciente pacienteSelecionado;
    private PacienteDataModel pacienteDataModel;
    private DaoGenerico daoGenerico;
    private Clinica clinica;
    private String tipo;
    private boolean verEscolar;
    private boolean verTrabalho;
    private String orgao;
    private String responsavel;
    private String rgResponsavel;
    private String numeroDias;
    private String cid;
    private String observacoes;
    private String horaEntrada;
    private String horaSaida;

    public EmitirAtestadoMB() {
        this.daoGenerico = new DaoGenerico();
        List<Paciente> pacientes = this.daoGenerico.listarTodos(Paciente.class);
        this.pacienteDataModel = new PacienteDataModel(pacientes);
        FacesContext context = FacesContext.getCurrentInstance();
        this.clinica = SessionUtil.carregarClinica(context);
    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    public PacienteDataModel getPacienteDataModel() {
        return pacienteDataModel;
    }

    public void setPacienteDataModel(PacienteDataModel pacienteDataModel) {
        this.pacienteDataModel = pacienteDataModel;
    }

    public Clinica getClinica() {
        return clinica;
    }

    public void setClinica(Clinica clinica) {
        this.clinica = clinica;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public boolean isVerEscolar() {
        return verEscolar;
    }

    public void setVerEscolar(boolean verEscolar) {
        this.verEscolar = verEscolar;
    }

    public boolean isVerTrabalho() {
        return verTrabalho;
    }

    public void setVerTrabalho(boolean verTrabalho) {
        this.verTrabalho = verTrabalho;
    }

    public String getOrgao() {
        return orgao;
    }

    public void setOrgao(String orgao) {
        this.orgao = orgao;
    }

    public String getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(String responsavel) {
        this.responsavel = responsavel;
    }

    public String getRgResponsavel() {
        return rgResponsavel;
    }

    public void setRgResponsavel(String rgResponsavel) {
        this.rgResponsavel = rgResponsavel;
    }

    public String getNumeroDias() {
        return numeroDias;
    }

    public void setNumeroDias(String numeroDias) {
        this.numeroDias = numeroDias;
    }

    public String getCid() {
        return cid;
    }

    public void setCid(String cid) {
        this.cid = cid;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    public String getHoraEntrada() {
        return horaEntrada;
    }

    public void setHoraEntrada(String horaEntrada) {
        this.horaEntrada = horaEntrada;
    }

    public String getHoraSaida() {
        return horaSaida;
    }

    public void setHoraSaida(String horaSaida) {
        this.horaSaida = horaSaida;
    }

    public void emitirAtestado() {
        FacesMessage message = new FacesMessage();
        String msg = "ATESTADO EMITIDO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        HashMap<String, Object> parameterMap = new HashMap<String, Object>();
        String nomepaciente = this.pacienteSelecionado.getNome() + " " + this.pacienteSelecionado.getSobrenome();
        String enderecoClinica = this.clinica.getEndereco().getLogradouro() + ", " + this.clinica.getEndereco().getNumero() + " - " + this.clinica.getEndereco().getBairro() + ", " + this.clinica.getEndereco().getCidade() + "-" + this.clinica.getEndereco().getUf();
        String logo = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/clinica/" + this.clinica.getLogo());
        String corpo = null;
        if (!this.tipo.equals("nada")) {
            if (this.tipo.equals("escolar")) {
                corpo = "Atesto, junto a " + this.orgao + ", "
                        + "para fins de abono de faltas, que " + nomepaciente + ","
                        + " cujo responsável é " + this.responsavel + ", "
                        + "RG n° " + this.rgResponsavel + ", "
                        + "necessita de " + this.numeroDias + " dias de afastamento de suas atividades escolares,"
                        + " a partir desta data.";
            } else if (this.tipo.equals("trabalho")) {
                corpo = "Atesto, junto a " + this.orgao + ","
                        + " que " + nomepaciente + ", "
                        + "portador do RG n° " + this.rgResponsavel + ", "
                        + "esteve sob meus cuidados profissionais no dia de hoje, "
                        + "no horário das " + this.horaEntrada + " às " + this.horaSaida + " horas "
                        + "e necessita de " + this.numeroDias + " dias de afastamento de suas atividades profissionais a partir desta data.";
            }

            parameterMap.put("TITULO", "ATESTADO");
            parameterMap.put("CORPO_ATESTADO", corpo);
            parameterMap.put("OBSERVACAO", this.observacoes);
            parameterMap.put("CID", this.cid);
            parameterMap.put("CLINICA_LOGO", logo);
            parameterMap.put("CLINICA_ENDERECO", enderecoClinica);
            parameterMap.put("CLINICA_EMAIL", this.clinica.getContato().getEmail());
            parameterMap.put("CLINICA_TELEFONE", this.clinica.getContato().getTelefone());
            parameterMap.put("CLINICA_CELULAR", this.clinica.getContato().getCelular());

            String relatorio = "atestado.jasper";
            RelatorioUtil.gerarRelatorioSemColecao(relatorio, parameterMap);

        } else {
            msg = "ERRO AO EMITIR ATESTADO!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        }

        this.zerar();

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void exibeBoxAtestado() {
        if (this.tipo.equals("escolar")) {
            this.verEscolar = true;
            this.verTrabalho = false;
        } else if (this.tipo.equals("trabalho")) {
            this.verEscolar = false;
            this.verTrabalho = true;
        } else if (this.tipo.equals("nada")) {
            this.verEscolar = false;
            this.verTrabalho = false;
        }
    }

    private void zerar() {
        orgao = "";
        responsavel = "";
        rgResponsavel = "";
        numeroDias = "";
        cid = "";
        observacoes = "";
        horaEntrada = "";
        horaSaida = "";
        this.pacienteSelecionado = new Paciente();
        this.tipo = "nada";
    }

    public void onRowSelect(SelectEvent event) {
    }
}
